home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
pctj8407.arc
/
UCL2.BAS
< prev
next >
Wrap
BASIC Source File
|
1986-09-14
|
7KB
|
165 lines
100 PRINT "UCL.BAS version 83/05/22"
105 REM Copyright C 1983 by Eliezer Naddor
110 REM Needs UCLEXA.BAS and UCLHEL.BAS
115 REM UCL parsing algorithm in 9600 by David Naddor 83/04/26
199 ON ERROR GOTO 9800
200 DEF FNS$(N)=MID$(STR$(N),2)
300 DIM C$(12),V(12,9):M9=12:N9=9
400 REM 1 2 3 4 5 6 7 8
405 C0$=" COM DIS EXA GET HEL NEW SAV STO"
410 Q0$=" ADD SUB MUL DIV MIN MAX COM ARI"
415 P0$=" ELE ROW COL ALL FOR"
420 C0$=" "+C0$:Q0$=" "+Q0$:P0$=" "+P0$
425 F0$="###,###.######":F1$="####.##":F2$="#### "
430 Q1$=CHR$(34):Q2$="'":S1$=",":S2$=" "
900 PRINT " ";M$
1000 PRINT:GOSUB 9700:PRINT "UCL? ";
1005 GOSUB 9600:PRINT:M$="Bad UCL":C$=C$(2)
1010 C0=INSTR(1,C0$," "+LEFT$(C$(1),3))/4
1015 ON 1+C0 GOTO 900,1300,2700,1800,2000,1700,1200,2070,9999
1020 REM UCL COM DIS EXA GET HEL NEW SAV STO
1200 M$="Ready":P0=INSTR(P0$," "+LEFT$(C$,3))/4
1205 ON 1+P0 GOTO 900,2100,2200,2300,2400,2600
1210 REM UCL ELE ROW COL ALL FOR
1300 GOSUB 9400:IF J=0 OR N8<>5 THEN 900
1305 Q0=INSTR(Q0$," "+LEFT$(T$,3))/4:IF Q0=0 OR Q0>=7 THEN 900
1310 P0=INSTR(P0$," "+LEFT$(C$,3))/4
1315 IF P0<>2 AND P0<>3 THEN 900 ELSE M$="Done"
1320 ON P0-1 GOTO 3100,3200
1325 REM ROW COL
1700 IF N8=1 THEN C$="COM" ELSE IF C$="ALL" THEN T1$="":T2$="9998":GOTO 1715
1705 Q0=INSTR(Q0$," "+LEFT$(C$,3))/4-6:IF Q0<=0 THEN 900
1710 T1$=FNS$(1000*Q0+999):T2$=FNS$(1000*Q0+1999)
1715 C$="UCLHEL.BAS":GOTO 1850
1800 IF N8=1 THEN C$="EXA" ELSE IF C$="ALL" THEN T1$="":T2$="9998":GOTO 1815
1805 C0=INSTR(C0$," "+LEFT$(C$,3))/4:IF C0=0 THEN 900
1810 T1$=FNS$(1000*C0-1):T2$=FNS$(1000*C0+999)
1815 C$="UCLEXA.BAS"
1850 OPEN C$ FOR INPUT AS #1
1855 IF LEN(T1$)<=3 THEN T1$=""
1860 LINE INPUT #1,T$:IF T$<T1$ THEN 1860
1865 IF T$<T2$ THEN PRINT MID$(T$,7):GOTO 1860
1870 CLOSE 1:GOTO 1000
2000 IF INSTR(C$,".")>0 THEN 2050 ELSE RESTORE
2005 READ S0$:IF INSTR(S0$,C$)=0 THEN M$="No data set "+C$:GOTO 900
2010 READ S$,R9,C9,V$:FOR R=0 TO R9
2015 FOR C=0 TO C9:READ V(R,C):NEXT C
2020 NEXT R:IF S$<>C$ THEN 2010 ELSE GOSUB 9300:GOTO 2090
2050 OPEN C$ FOR INPUT AS #1:INPUT #1,S$,R9,C9,V$
2055 FOR R=0 TO R9:LINE INPUT #1,L$:N8=0:GOSUB 9610
2060 FOR C=0 TO C9:V(R,C)=VAL(C$(C+1)):NEXT C
2065 NEXT R:CLOSE 1:GOSUB 9300:GOTO 2090
2070 IF INSTR(C$,".")=0 THEN 900 ELSE OPEN C$ FOR OUTPUT AS #2
2075 WRITE #2,C$,R9,C9,V$
2080 FOR R=0 TO R9:FOR C=0 TO C9-1:PRINT #2,FNS$(V(R,C));",";
2085 NEXT C:PRINT #2,FNS$(V(R,C9)):NEXT R:CLOSE 2
2090 M$="Data set "+C$+" ready":GOTO 900
2100 IF N8=5 THEN 2120
2105 PRINT " Row,Col,Val"
2110 GOSUB 9600:IF LEFT$(C$(1),3)="STO" THEN 900
2115 IF N8<>3 THEN 2105
2120 R2=VAL(C$(N8-2)):C2=VAL(C$(N8-1))
2125 V(R2,C2)=VAL(C$(N8)):IF R2>R9 THEN R9=R2
2130 IF C2>C9 THEN C9=C2
2135 IF N8=3 THEN 2110 ELSE GOTO 900
2200 T$=C$(3):GOSUB 9500:R1=G1:R2=G2:IF R2>R9 THEN R9=R2
2205 GOTO 2500
2300 T$=C$(3):GOSUB 9500:C1=G1:C2=G2:IF C2>C9 THEN C9=C2
2305 FOR C=C1 TO C2
2310 PRINT R9;"values in col";C;"? ";
2315 GOSUB 9600:IF N8<>R9 THEN 2310
2320 FOR R=1 TO R9:V(R,0)=1:V(R,C)=VAL(C$(R)):NEXT R
2325 NEXT C:GOTO 900
2400 PRINT "Set,Rows,Cols,Title";"? ";
2405 GOSUB 9600:IF N8<>4 THEN 2400
2410 S$=C$(1):R9=VAL(C$(2)):C9=VAL(C$(3))
2415 V$=C$(4):R1=1:R2=R9:GOSUB 9300
2500 FOR R=R1 TO R2:V(R,0)=1
2505 PRINT C9;"values in row";R;"? ";
2510 GOSUB 9600:IF N8<>C9 THEN 2505
2515 FOR C=1 TO C9:V(0,C)=1:V(R,C)=VAL(C$(C)):NEXT C
2520 NEXT R:GOTO 900
2600 M$="Bad format":C$=C$(N8)
2605 IF INSTR(F0$,C$)=0 GOTO 900 ELSE F1$=C$:F2$=C$
2610 J=INSTR(C$,".")
2615 IF J>0 THEN F2$=LEFT$(F1$,J-1)+SPACE$(LEN(F1$)-J+1)
2620 M$=F1$+" noted":GOTO 900
2700 P0=INSTR(1,P0$," "+LEFT$(C$,3))/4
2704 ON 1+P0 GOTO 900,2710,2720,2730,2740,2770
2706 REM UCL ELE ROW COL ALL FOR
2710 R1=VAL(C$(3)):R2=R1:C1=VAL(C$(4)):C2=C1:GOTO 2750
2720 T$=C$(3):GOSUB 9500:R1=G1:R2=G2
2722 IF N8<=4 THEN C1=1:C2=C9:GOTO 2750
2724 T$=C$(5):GOSUB 9500:C1=G1:C2=G2:GOTO 2750
2730 T$=C$(3):GOSUB 9500:C1=G1:C2=G2
2732 IF N8<=4 THEN R1=1:R2=R9:GOTO 2750
2734 T$=C$(5):GOSUB 9500:R1=G1:R2=G2:GOTO 2750
2740 R1=1:R2=R9:C1=1:C2=C9
2742 PRINT "Data set = ";S$;" Rows =";R9;" Cols =";C9;" Title = ";V$:PRINT
2750 IF R2>R9 OR C2>C9 THEN 900 ELSE PRINT " Col";
2752 FOR C=C1 TO C2:IF V(0,C)>0 THEN PRINT USING F2$;C;
2754 NEXT C:PRINT:PRINT "Row"
2756 FOR R=R1 TO R2:IF V(R,0)=0 THEN 2766 ELSE PRINT USING "### ";R;
2758 FOR C=C1 TO C2:IF V(0,C)=0 THEN 2764
2760 V=V(R,C):IF V=INT(V) THEN T$=F2$ ELSE T$=F1$
2762 PRINT USING T$;V;
2764 NEXT C:PRINT
2766 NEXT R:GOTO 1000
2770 M$="Format = "+F1$:GOTO 900
3100 R1=VAL(C$(3)):R2=VAL(C$(4)):R3=VAL(C$(5))
3105 FOR C=1 TO C9:V1=V(R1,C):V2=V(R2,C)
3110 GOSUB 3900:V(R3,C)=V3:NEXT C:V(R3,0)=1
3115 IF R3>R9 THEN R9=R3
3120 GOTO 900
3200 C1=VAL(C$(3)):C2=VAL(C$(4)):C3=VAL(C$(5))
3205 FOR R=1 TO R9:V1=V(R,C1):V2=V(R,C2)
3210 GOSUB 3900:V(R,C3)=V3:NEXT R:V(0,C3)=1
3215 IF C3>C9 THEN C9=C3
3220 GOTO 900
3900 ON Q0 GOTO 3910,3920,3930,3940,3950,3960
3902 REM ADD SUB MUL DIV MAX MIN
3910 V3=V1+V2:RETURN
3920 V3=V1-V2:RETURN
3930 V3=V1*V2:RETURN
3940 V3=V1/V2:RETURN
3950 IF V1<V2 THEN V3=V1 ELSE V3=V2
3955 RETURN
3960 IF V1<V2 THEN V3=V2 ELSE V3=V1
3965 RETURN
9300 FOR R=R9+1 TO M9:V(R,0)=0:NEXT R
9305 FOR C=C9+1 TO N9:V(0,C)=0:NEXT C:RETURN
9400 T$=C$(1):J=INSTR(T$,"/")
9405 IF J>0 THEN T$=MID$(T$,J+1)
9410 RETURN
9500 J=INSTR(2,T$,"-")
9505 IF J=0 THEN G1=VAL(T$):G2=G1
9510 IF J>0 THEN G1=VAL(LEFT$(T$,J-1)):G2=VAL(MID$(T$,J+1))
9515 RETURN
9600 LINE INPUT L$:N8=0
9610 P=1:IF L$="" THEN RETURN
9615 Q1=INSTR(P,L$+Q1$,Q1$):Q2=INSTR(P,L$+Q2$,Q2$):IF Q2<Q1 THEN Q1=Q2
9620 S1=INSTR(P,L$+S1$,S1$):S2=INSTR(P,L$+S2$,S2$):IF S2<S1 THEN S1=S2
9625 IF Q1>=S1 THEN 9640
9630 T$=MID$(L$,Q1,1):L$=LEFT$(L$,Q1-1)+MID$(L$,Q1+1):P=INSTR(P,L$,T$)
9635 IF P=0 THEN S1=LEN(L$)+1 ELSE L$=LEFT$(L$,P-1)+MID$(L$,P+1):GOTO 9615
9640 X$=LEFT$(L$,S1-1):L$=MID$(L$,S1+1):IF X$>"" THEN N8=N8+1:C$(N8)=X$
9645 GOTO 9610
9700 P7=P7+1:PRINT "[";FNS$(P7);"] ";
9705 PRINT DATE$;" ";TIME$:RETURN
9800 PRINT "ERR = ";ERR;"in line";ERL
9805 STOP:RESUME 1000
9900 REM S$=Set,R9=Rows,C9=Colms,V$=Title
9905 DATA AB
9910 DATA A,3,5,"Stores and items"
9911 DATA 1, 1, 1, 1, 0, 1
9912 DATA 1, 20,35,12,37,59
9913 DATA 1, 8,20, 4,42,60
9914 DATA 0, 22,33,18,27,49
9920 DATA B,4,3,"Quantity, cost, price"
9921 DATA 1, 1, 1, 1
9922 DATA 1, 3, 4, 7
9923 DATA 1, 6,12.50,18.00
9924 DATA 1, 3,25.35,35.75
9925 DATA 1,12,15.00,28.15
9999 IF N8=2 THEN CHAIN C$